/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hr.fer.zpr.nmbp.project3.bll;

import hr.fer.zpr.nmbp.project3.bll.exceptions.BLLException;
import hr.fer.zpr.nmbp.project3.dao.BolnicaDAO;
import hr.fer.zpr.nmbp.project3.dao.DAOFactory;
import hr.fer.zpr.nmbp.project3.dao.exceptions.DAOException;
import hr.fer.zpr.nmbp.project3.model.Bolnica;
import hr.fer.zpr.nmbp.project3.model.Lijecnik;

import java.util.List;

public class BolnicaBLL {

	private BolnicaDAO bolnicaDAO = DAOFactory.getBolnicaDAO();

	public void save(Bolnica bolnica) {
		if (!BolnicaBLL.validate(bolnica)) {
			throw new BLLException("Sva polja moraju biti popunjena.");
		}
		
		for (Lijecnik lijecnik : bolnica.getLijecnici()) {
			lijecnik.setBolnica(bolnica);
		}
		
		try {
			bolnicaDAO.save(bolnica);
		} catch (DAOException ex) {
			throw new BLLException(ex.getMessage());
		}
	}

	public void update(Bolnica bolnica) {
		if (!BolnicaBLL.validate(bolnica)) {
			throw new BLLException("Sva polja moraju biti popunjena");
		}

		Bolnica proto = new Bolnica();
		proto.setSifra(bolnica.getSifra());
		List<Bolnica> bolniceFromDB = this.bolnicaDAO.load(proto);

		Bolnica persistentBolnica;
		if (bolniceFromDB.size() > 0) {
			persistentBolnica = bolniceFromDB.get(0);
			persistentBolnica.setAdresa(bolnica.getAdresa());
			persistentBolnica.setNaziv(bolnica.getNaziv());
		} else {
			throw new BLLException("Nepostojeća bolnica u bazi podataka");
		}

		if(persistentBolnica.getLijecnici() != null){
			for (Lijecnik lijecnik : persistentBolnica.getLijecnici()) {
				lijecnik.setBolnica(persistentBolnica);
			}
		}

		try {
			bolnicaDAO.save(persistentBolnica);
		} catch (DAOException ex) {
			throw new BLLException(ex.getMessage());
		}
	}

	public void delete(Bolnica bolnica) {
		try {
			bolnicaDAO.delete(bolnica);
		} catch (DAOException ex) {
			throw new BLLException(ex.getMessage());
		}
	}

	public List<Bolnica> load(Bolnica bolnicaPrototype) {
		return bolnicaDAO.load(bolnicaPrototype);
	}

	public List<Bolnica> loadAll() {
		return bolnicaDAO.loadAll();
	}

	public static boolean validate(Bolnica bolnica) {
		if (bolnica == null
				|| bolnica.getNaziv().isEmpty()
				|| bolnica.getAdresa().isEmpty()) {
			return false;
		} else {
			return true;
		}
	}
}
